Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / WebSocketConnection.js

Displaying Raw • Download


meshchatx/src/frontend/js/WebSocketConnection.js 450ed9e35490702052539e98baa04edaabf876e7 (450ed9e3) Text, 5.95 KB

Tff7b72import Te6edf3mitt Tff7b72from Ta5d6ff"mitt"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3reconnectDelayWithJitterMs Tb4b4b4} Tff7b72from Ta5d6ff"./wsConnectionSupport"Tb4b4b4;

Tff7b72const Te6edf3PING_INTERVAL_MS Tff7b72= T79c0ff25000Tb4b4b4;
Tff7b72const Te6edf3PONG_TIMEOUT_MS Tff7b72= T79c0ff12000Tb4b4b4;
Tff7b72const Te6edf3BASE_RECONNECT_MS Tff7b72= T79c0ff1000Tb4b4b4;
Tff7b72const Te6edf3MAX_RECONNECT_MS Tff7b72= T79c0ff60000Tb4b4b4;
Tff7b72const Te6edf3JITTER_MAX_MS Tff7b72= T79c0ff400Tb4b4b4;

Tff7b72class Te6edf3WebSocketConnection Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3emitter Tff7b72= Te6edf3mittTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_heartbeatInterval Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pongTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_reconnectAttempt Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initialized Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_hadSuccessfulOpen Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pendingReconnectUi Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}

Tff7b72async Te6edf3connectTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72= Tff7b72falseTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72=== Ta5d6ff"undefined" Tff7b72|| Tff7b72!Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4) Tb4b4b4{
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3connectTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3initialized Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3reconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3onTb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3emitterTb4b4b4.Te6edf3onTb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3offTb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3emitterTb4b4b4.Te6edf3offTb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3emitTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3emitterTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3eventTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3_clearHeartbeatTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_heartbeatInterval Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_heartbeatIntervalTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_heartbeatInterval Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3_clearPongTimeoutTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_pongTimeout Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_pongTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pongTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3_stopHeartbeatTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_clearHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_clearPongTimeoutTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3_sendAppPingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3readyState Tff7b72!== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3sendTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"ping" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_clearPongTimeoutTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pongTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_pongTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3closeTb4b4b4(T79c0ff4000Tb4b4b4, Ta5d6ff"heartbeat timeout"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}Tb4b4b4, Te6edf3PONG_TIMEOUT_MSTb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3_startHeartbeatTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_stopHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_heartbeatInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_sendAppPingTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, Te6edf3PING_INTERVAL_MSTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_sendAppPingTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3reconnectTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3initialized Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72|| Tff7b72typeof Tffa657window Tff7b72=== Ta5d6ff"undefined" Tff7b72|| Tff7b72!Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3readyState Tff7b72=== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3wsUrl Tff7b72= Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3originTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^https/Tb4b4b4, Ta5d6ff"wss"Tb4b4b4)Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^http/Tb4b4b4, Ta5d6ff"ws"Tb4b4b4) Tff7b72+ Ta5d6ff"/ws"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72= Tff7b72new Te6edf3WebSocketTb4b4b4(Te6edf3wsUrlTb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"open"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destroyedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_reconnectAttempt Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_stopHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_startHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3isReconnect Tff7b72= Tff7b72thisTb4b4b4.Te6edf3_pendingReconnectUiTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pendingReconnectUi Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_hadSuccessfulOpen Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"connected"Tb4b4b4, Tb4b4b4{ Te6edf3isReconnect Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"close"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_stopHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destroyedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_hadSuccessfulOpenTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_pendingReconnectUi Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"disconnected"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3delay Tff7b72= Te6edf3reconnectDelayWithJitterMsTb4b4b4(
Tff7b72thisTb4b4b4.Te6edf3_reconnectAttemptTb4b4b4,
Te6edf3BASE_RECONNECT_MSTb4b4b4,
Te6edf3MAX_RECONNECT_MSTb4b4b4,
Te6edf3JITTER_MAX_MS
Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_reconnectAttempt Tff7b72+= T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeoutTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3destroyedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reconnectTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4, Te6edf3delayTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"error"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
T8b949e// close event will follow; reconnect scheduled there
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3onmessage Tff7b72= Tb4b4b4(Te6edf3messageTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3data Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3messageTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72&& Te6edf3dataTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"pong"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3_clearPongTimeoutTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// non-json: forward
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"message"Tb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Te6edf3destroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destroyed Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3initialized Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_hadSuccessfulOpen Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_pendingReconnectUi Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_stopHeartbeatTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3_reconnectTimeout Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3sendTb4b4b4(Te6edf3messageTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3ws Tff7b72!= Tff7b72null Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3readyState Tff7b72=== Te6edf3WebSocketTb4b4b4.Te6edf3OPENTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3wsTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3pingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3sendTb4b4b4(
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"ping"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// ignore
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72export Tff7b72default Tff7b72new Te6edf3WebSocketConnectionTb4b4b4(Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────